package com.yangchao.ch04

class example1 {
    public static void main(String[] args) {
        // 闭包短的匿名代码块
        //简单的闭包定义，用{}包括
        Closure clos = { println("Hello groovy") }
        clos.call()    //调用

        //闭包的形式参数：单个参数
        def clos1 = {
            param ->   //参数
                println("Hello groovy " + param)
        }
        clos1.call("ok1")

        //闭包，多个参数
        def clos2 = {
            param, value ->
                println("Hello groovy多个参数 " + param + " " + value)
        }
        clos2.call("ok1", "ok2")

        //默认参数名it

        def clos3 = {
            //相当于it->
            println("hello groovy" + it)
        }
        clos3.call("默认参数OK3")

        //闭包和变量的关系
        def str = "你好!"
        def clos4 = {
            println("Hello Groovy " + it + " " + str)
        }
        clos4.call("OK4") //

        //方法中使用闭包，闭包可以作为参数，进行传递

        def clos5 = {
            println("func User Closure:" + it)
        }
        //clos5.call()
        run(clos5)

        //集合和字符串中闭包
        def list = [100, 200, 300]
        list.each { println(it) }   //使用闭包方式遍历列表

        def map=['a':400,'b':500,'c':600]
        map.each {println(it)}       //使用闭包方式便利map映射，输出a=400.b=500,c=600
        map.each {println(it.key+">>>>>"+it.value)}  //遍历的输出key和value

        list.each{                        //闭包方式，在遍历条件中加入条件
            if (it% 3 ==0 ){
                println("能被3整除的是"+it)
            }
        }
    }

    static void run(Closure clo){
        clo.call("run")
    }

    }